﻿using System;
using System.ComponentModel.DataAnnotations;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using Sistema.Dominio.ValidationAttribute;
using System.Runtime.Serialization;
namespace Sistema.Dominio
{
    [DataContract]
    public class DadosPessoaFisicaVO : EntidadeValidavel<DadosPessoaFisicaVO>
    {
        private String _nome;
        private String _sobreNome;
        private String _cpf;
        private String _rg;
        private DateTime _dataEmissaoRg;
        private String _orgaoEmissorRg;
        private DateTime _dataNascimento;
        private enumSexo _sexo;
        private String _nacionalidade;
        private enumEstadoCivil _estadoCivil;

        public DadosPessoaFisicaVO()
        {
            this._nome = String.Empty;
            this._sobreNome = String.Empty;
            this._cpf = String.Empty;
            this._rg = String.Empty;
            this._orgaoEmissorRg = String.Empty;
            this._sexo = enumSexo.Masculino;
            this._estadoCivil = enumEstadoCivil.Solteiro;
            this._dataEmissaoRg = DateTime.Now;
            this._dataNascimento = DateTime.Now;
        }

        [DataMember]
        [Required(ErrorMessage = "Campo nome é obrigatório", AllowEmptyStrings = false)]
        [StringLength(50, ErrorMessage = "Campo nome deve conter no máximo 50 caracteres.")]
        public String Nome
        {
            get { return _nome; }
            set 
            { 
                _nome = value;
                base.RaisePropertyChanged("Nome");
            }
        }

        [DataMember]
        [Required(ErrorMessage = "Campo sobrenome é obrigatório", AllowEmptyStrings = false)]
        [StringLength(50, ErrorMessage = "Campo sobrenome deve conter no máximo 50 caracteres.")]
        public String Sobrenome
        {
            get { return _sobreNome; }
            set 
            { 
                _sobreNome = value;
                base.RaisePropertyChanged("SobreNome");
            }
        }

        [DataMember]
        [Required(ErrorMessage = "Campo Cpf é obrigatorio.", AllowEmptyStrings = false)]
        [Cpf(ErrorMessage = "Cpf informado inválido.")]
        public String Cpf
        {
            get { return _cpf; }
            set { _cpf = value; base.RaisePropertyChanged("Cpf"); }
        }

        [DataMember]
        [Required(ErrorMessage = "Campo Rg é obrigatorio.", AllowEmptyStrings = true)]
        [Rg(ErrorMessage = "Rg informado inválido.")]
        public String Rg
        {
            get { return _rg; }
            set { _rg = value; base.RaisePropertyChanged("Rg"); }
        }

        [DataMember]
        public DateTime DataEmissaoRg
        {
            get { return _dataEmissaoRg; }
            set { _dataEmissaoRg = value; base.RaisePropertyChanged("DataEmissaoRg"); }
        }

        [DataMember]
        public String OrgaoEmissorRg
        {
            get { return _orgaoEmissorRg; }
            set
            {
                _orgaoEmissorRg = value; base.RaisePropertyChanged("OrgaoEmissorRg");
            }
        }

        //[RelativeDateTimeValidator(-120, DateTimeUnit.Year, -18,
        //           DateTimeUnit.Year, ErrorMessage="É nescessario ser maior de idade.")]
        [DataMember]
        public DateTime DataNascimento
        {
            get { return _dataNascimento; }
            set { _dataNascimento = value; base.RaisePropertyChanged("DataNascimento"); }
        }

        [DataMember]
        [StringLength(30, ErrorMessage = "Nacionalidade pode conter no máximo 30 caracteres.")]
        public 
            String Nacionalidade
        {
            get { return _nacionalidade; }
            set { _nacionalidade = value; base.RaisePropertyChanged("Nacionalidade"); }
        }

        [DataMember]
        public enumSexo Sexo
        {
            get { return _sexo; }
            set { _sexo = value; base.RaisePropertyChanged("Sexo"); }
        }

        [DataMember]
        public enumEstadoCivil EstadoCivil
        {
            get { return _estadoCivil; }
            set { _estadoCivil = value; base.RaisePropertyChanged("EstadoCivil"); }
        }
    }
    public enum enumSexo
    {
        [System.ComponentModel.Description("Masculino")]
        Masculino,
        [System.ComponentModel.Description("Feminino")]
        Feminino
    }
    public enum enumEstadoCivil
    {
        [System.ComponentModel.Description("Solteiro")]
        Solteiro,
        [System.ComponentModel.Description("Casado")]
        Casado,
        [System.ComponentModel.Description("Viuvo")]
        Viuvo,
        [System.ComponentModel.Description("Outros")]
        Outros
    }
}
